package com.cmict.data.infra.controller.admin.message.vo;

import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.cmict.data.infra.api.emus.MessageTypeEnum;
import com.cmict.data.infra.api.emus.NotifyRecipientFilterTypeEnum;
import com.cmict.data.infra.api.emus.NotifySendTypeEnum;
import com.cmict.data.infra.enums.message.AnnouncementStatusEnum;
import com.cmict.data.infra.enums.message.NotifyChannelEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 公告信息
 *
 * @author hccake 2020-12-15 17:01:15
 */
@Data
@Schema(title = "公告信息分页VO")
public class AnnouncementPageVO {

	private static final long serialVersionUID = 1L;

	/**
	 * ID
	 */
	@Schema(title = "ID")
	private Long id;

	/**
	 * 标题
	 */
	@Schema(title = "标题")
	private String title;

	/**
	 * 附属url
	 */
	@Schema(title = "附属url")
	private String url;

	/**
	 * 消息类型
	 * @see MessageTypeEnum
	 */
	@Schema(title = "消息类型")
	private Integer type;

	/**
	 * 内容
	 */
	@Schema(title = "内容")
	private String content;

	/**
	 * 内容显示字段
	 */
	@Schema(title = "内容显示字段")
	private String contentDisplay;

	@Schema(title = "短信内容")
	private String smsContent;
	/**
	 * 接收人筛选方式，1：全部 2：用户角色 3：组织机构 4：用户类型 5：自定义用户
	 * @see NotifyRecipientFilterTypeEnum
	 */
	@Schema(title = "接收人筛选方式")
	private Integer recipientFilterType;

	/**
	 * 对应接收人筛选方式的条件信息，多个用逗号分割。如角色标识，组织ID，用户类型，用户ID等
	 */
	@TableField(typeHandler = JacksonTypeHandler.class)
	@Schema(title = "对应接收人筛选方式的条件信息。如角色标识，组织ID，用户类型，用户ID等")
	private JSONArray recipientFilterCondition;

	/**
	 * 接收方式，值与通知渠道一一对应
	 * @see NotifyChannelEnum
	 */
	@TableField(typeHandler = JacksonTypeHandler.class)
	@Schema(title = "接收方式")
	private List<Integer> receiveMode;

	/**
	 * 状态
	 * @see AnnouncementStatusEnum
	 */
	@Schema(title = "状态")
	private Integer status;

	/**
	 * 消息发送类型
	 * @see NotifySendTypeEnum
	 */
	@Schema(title = "消息发送类型")
	private Integer sendAction;

	/**
	 * 消息发送时间
	 */
	@Schema(title = "消息发送时间")
	private LocalDateTime sendTime;

	/**
	 * 创建时间
	 */
	@Schema(title = "创建时间")
	private LocalDateTime createTime;
	/**
	 * 最后更新时间
	 */
	@Schema(title = "最后更新时间")
	private LocalDateTime updateTime;
	/**
	 * 创建者，目前使用 SysUser 的 id 编号
	 *
	 * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
	 */
	@Schema(title = "创建者")
	private String creator;
	/**
	 * 更新者，目前使用 SysUser 的 id 编号
	 *
	 * 使用 String 类型的原因是，未来可能会存在非数值的情况，留好拓展性。
	 */
	@Schema(title = "更新者")
	private String updater;

	/**
	 * 附件
	 */
	@Schema(title = "附件")
	private String allFileList;

}
